#include "LinkStack.h"

// 初始化
LinkStack* Init_LinkStack() {
    LinkStack* stack = NULL;

    stack = (LinkStack*)malloc(sizeof(LinkStack));

    stack->head.next = NULL;
    stack->size      = 0;

    return stack;
}

// 入栈
int Push_LinkStack(LinkStack* stack, LinkNode* data) {
    if(NULL == stack) {
        return -1;
    }
    if(NULL == data) {
        return -2;
    }

    // 直接插入到 head 的后面，成为新的 第一个节点
    data->next = stack->head.next;
    stack->head.next = data;
    
    stack->size++;

    return 0;
}

// 返回栈顶元素
LinkNode* Top_LinkStack(LinkStack* stack) {
    if(NULL == stack) {
        return NULL;
    }
    if(0 == stack->size) {
        return NULL;
    }

    // 其实是栈区第一个元素
    return stack->head.next;
}

// 出栈
int Pop_LinkStack(LinkStack* stack) {
    if(NULL == stack) {
        return -1;
    }
    if(0 == stack->size) {
        return -2;
    }
    
    LinkNode* pNext = stack->head.next;
    stack->head.next = pNext->next;

    stack->size--;

    return 0;
}


// 返回栈区元素个数
int GetSize_LinkStack(LinkStack* stack) {
    if(NULL == stack) {
        return -1;
    }

    return stack->size;
}

// 清空栈
int Clear_LinkStack(LinkStack* stack) {
    if(NULL == stack) {
        return -1;
    }

    stack->head.next = NULL;
    stack->size      = 0;

    return 0;
}

// 销毁栈
int Destory_LinkStack(LinkStack* stack) {
    if(NULL == stack) {
        return -1;
    }

    if(stack != NULL) {
        free(stack);
        stack = NULL;
    }
    
    return 0;
}

